python函数之csr |
您所在的位置:网站首页 › scipy sparse lil交换列 › python函数之csr |
csr_matrix表示逐行(注意csr的r,row)压缩矩阵,类似地,也有个函数csc_matrix(c:column)表示逐列压缩。 形式:csr_matrix( (data, indices, indptr), shape=(x,y) ) shape就是压缩后的矩阵的形状,x行y列; data就是矩阵里面存储的值; indptr可以看作是记录了每个会话中的项目数量;(在推荐中有多个用户,每个用户创建了多个会话,每个会话有多个项目) indice可以看作是压缩后的矩阵的列的索引; 例: #红色表示第1个会话里的项目;蓝色表示第2个会话里的项目,绿色表示第3个会话里的项目 indice : [1, 2, 0, 1, 2, 0, 1]; #通过indptr可以看出,第1个会话中有2-0=2个项目,第2个会话有5-2 =3个项目,第3个会话有7-5=2个项目 indptr:[0, 2, 5, 7]; data:[1, 1, 1, 1, 1, 1, 1]; matrix output: [[0 1 1] [1 1 1] [1 1 0]] 具体计算过程就是,依次逐行压缩: 首先当i=0(也就是第0行)时,也就是对第一个会话中的两个项目进行操作,取得 indptr[i]和indptr[i+1],即0和2;将其作为indice列表的切片值,indice[0:2]=[1,2],也就是说在第0行时,第1列和第2列有非零值,将indptr[i]和indptr[i+1]作为data列表的切片值,data[0:2]=[1,1],其第1列和第2列的值就为1,1;其余列的值为0。 然后i=1,2...依次操作就完成了。 这个函数的解释大概就是这样, 下面是推荐场景中个人关于data_mask方法的处理逻辑的记录,可以不用看了。 ------------------------------------------------------------------------------------------------------------------------------- 在DHCN这篇论文中,此矩阵可以当作是data_mask矩阵返回, x:all_session,y:n_node.也就是说该矩阵的行可以看作是所有的会话,列看作是所有的项目。 例:原矩阵输入为 u_inputs = [ [2, 2, 11, 2], [2, 3, 12, 2], [1, 1, 1, 2], ]经过去重后, u_inputs = [ [2, 11], [2, 3, 12], [1 ,2], ] indptr:[0, 2 ,5, 7] indice:[1, 10, 1 ,2 ,11, 0, 1] #每个项目-1 data:[1,1,1,1,1,1,1] matrix: [0,1,0,0,0,0,0,0,0,0,1,0] [0,1,1,0,0,0,0,0,0,0,0,1] [1,1,0,0,0,0,0,0,0,0,0,0] 这个就是data_mask方法最后返回的东西。 但因为目前才刚开始跑别人论文的代码,所以有许多地方仍不是很清楚。 具体来说,有两处疑问: 1.这个矩阵的用途; 2.这个矩阵的索引是由indice列表决定的,也就是说这个矩阵的尺寸完全是由indice列表里面的决定,但indice列表里的值仅仅是项目id-1,一般来说,数据集中的项目id都是上亿级别,那难道这个矩阵的尺寸也这么大?而且是个极其稀疏的矩阵。感觉是自己想错了... |
今日新闻 |
推荐新闻 |
CopyRight 2018-2019 办公设备维修网 版权所有 豫ICP备15022753号-3 |